import {extend, RequestOptionsInit} from 'umi-request';
import {message} from 'antd';

// const httpsAgent = require('https-agent');
// const httpsAgent = new https.Agent({ rejectUnauthorized: false, });
// const agent = httpsAgent({ rejectUnauthorized: false });
const codeMessage = {
    200: '服务器成功返回请求的数据。',
    201: '新建或修改数据成功。',
    202: '一个请求已经进入后台排队（异步任务）。',
    204: '删除数据成功。',
    400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
    401: '用户没有权限（令牌、用户名、密码错误）。',
    403: '用户得到授权，但是访问是被禁止的。',
    404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
    406: '请求的格式不可得。',
    410: '请求的资源被永久删除，且不会再得到的。',
    422: '当创建一个对象时，发生一个验证错误。',
    500: '服务器发生错误，请检查服务器。',
    502: '网关错误。',
    503: '服务不可用，服务器暂时过载或维护。',
    504: '网关超时。',
};
type CodeMessage = typeof codeMessage;
/**
 * 异常处理程序
 */
const errorHandler = (error: any) => {
    const {response, data} = error;
    if (response && response.status) {
        const errorText =
            data.errorMessage ||
            data.error_description ||
            data.message ||
            codeMessage[response.status as keyof CodeMessage] ||
            response.statusText;
        message.error(`请求错误,错误码 ${response.status}: ${errorText}`);
    }
    return error;
};

/**
 * 需要token鉴权的请求
 * 配置request请求时的默认参数
 */
const request = extend({
    // mode: 'no-cors',
    // headers: {
    //     'Content-Type': 'application/json',
    // },
    errorHandler,
    timeout: 10000,
});
request.interceptors.request.use(
    (url: string, options: RequestOptionsInit): any => {
        if (
            options.method === 'post' ||
            options.method === 'put' ||
            options.method === 'delete' ||
            options.method === 'get'
        ) {
            // const accessToken = sessionStorage.getItem('token');
            const accessToken = sessionStorage.getItem('token');
            // const accessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJjOWFjZWQzYzQwNjA0YjdhOTcwYWRmY2E1MDBhZGFjZCIsImlhdCI6MTY3ODIwNTQ2MiwiZXhwIjoxNjg1OTgxNDYyfQ.yIrJxdWs_9nldL5hVaDP6OAs6g4r-4RnFsoWerE-5c4';
            // const token = accessToken && accessToken.length ? accessToken.substring(1, accessToken.length-1) : '';
            const headers = {
                // 'Content-Type': 'application/json', // 为了兼容formdata传值
                // Accept: 'application/json',
                Authorization: `Bearer ${accessToken}`,
                token: accessToken,
            };
            // console.log('url', url);
            // console.log('options', options);
            // console.log('accessToken', accessToken);
            // console.log('headers', headers);
            return {
                url,
                options: {...options, headers: {...options.headers, ...headers}},
            };
        }
    },
);

export default request;
